#include <iostream>

// template<typename T>
// struct A
// {
//     T a;
// };

// 继承的模板类如果声明其模板类型，其子类不再是类模板，是普通类
//  struct B: public A<int>
//  {};

// 继承的模板类不明确模板类型，子类继续是类模板
//  template<typename T>
//  struct C:public A<T>
//  {};

template <typename T1, typename T2>
struct pair
{
    T1 first;
    T2 second;
};

// 全特化:声明全部的模板类型
template <>
struct pair<int, std::string>
{
    int first;
    std::string second;
};

// 偏特化：部分特化
template <typename T>
struct pair<int, T>
{
    int first;
    T second;
};

// 优先级：全特化>偏特化>类模板
int main()
{
    // B num;
    //  C<std::string> c;
    //  //num.a= 10;
    //  c.a="zhangsan";
    //  std::cout<<c.a<<std::endl;

    pair<int, std::string> p = {1, "zhangsan"};
    std::cout << p.second + "hello" << std::endl;
    return 0;
}
